;(function($) {
	$('.csstree li').live('click', function(e) {
		e.preventDefault();
		var me = $(this);
		me.find('> ul').toggle('fast', function() {
			me.csstree_toggle();
		});
		return false;
	});

	$.fn.csstree = function(opts) {
		if (!opts) {
			opts = {
				'collapse': false,
			};
		}
		$(this).addClass('csstree');
		if (opts.collapse) {
			$(this).find('ul').hide();
		}
		$(this).csstree_initul();
	};

	$.fn.csstree_initul = function() {
		$(this).find('> li').each(function() {
			$(this).csstree_toggle();
			$(this).find('> ul').each(function() {
				$(this).csstree_initul();
			});
		});
	};

	$.fn.csstree_toggle = function() {
		var $li = $(this);
		var $ul = $li.find('> ul');
		if ($ul.length > 0) {
			if ($ul.css('display') == 'none') {
				$li.addClass('csstree-collapsed')
				   .removeClass('csstree-expanded');
			} else {
				$li.addClass('csstree-expanded')
				   .removeClass('csstree-collapsed');
			}
		} else {
			$li.removeClass('csstree-expanded')
			   .removeClass('csstree-collapsed');
		}
	};

	$.fn.csstree_add = function(opts) {
		var $li = $(this);
		var root = $li.parent('ul.csstree');
		if (root) { // yes, $me is in the treeview
			while ($li) {
				$li.csstree_toggle();
				var $ul = $li.parent('ul');
				if ($ul && !$ul.is('.csstree')) {
					$li = $ul.parent('li');
				} else {
					break;
				}
			};
		}
	};
})(jQuery);

